﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.Windows.Forms;

namespace Salon
{
    class Global
    {
        //tutaj w zmiennych statycznych możemy sobie przechowyać 
        //wszelakie zmienne globalne
        public static User currentUser { get; set;}

        public static MainPage MainPage{ get; set;}


        /// <summary>
        /// Zwraca listę kontrolek filtrujących (implementujących IFilter)
        /// </summary>
        /// <param name="form">Formatka z której wyciągamy wszystkie kontrolki filtrujące</param>
        /// <returns></returns>
        public static IList<IFilter> getFilterList(Form form)
        {
            IList<IFilter> filterList = new List<IFilter>();
            foreach (Control ctr in form.Controls)
            {
                
                IFilter filtr = ctr as IFilter; // magia
                if (filtr != null)
                    filterList.Add(filtr);
            }
            return filterList;
        }

        public static String EncodePassword(String originalPassword)
        {
            //Declarations
            Byte[] originalBytes;
            Byte[] encodedBytes;
            MD5 md5;

            //Instantiate MD5CryptoServiceProvider, get bytes for original password and compute hash (encoded password)
            md5 = new MD5CryptoServiceProvider();
            originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword);
            encodedBytes = md5.ComputeHash(originalBytes);

            //Convert encoded bytes back to a 'readable' string
            return BitConverter.ToString(encodedBytes);
        }

        /// <summary>
        /// Składa warunki do zapytania na podstawie listy kontrolek filtrujących.
        /// Zakładamy że w zapytaniu do którego doklejamy zwrócony String jest już klauzula WHERE z jakimś warunkiem 
        /// (jeśli w glównym zapytaniu jej nie ma to należy dopisać 'WHERE 1=1 ')
        /// </summary>
        /// <param name="filterList">Lista kontrolek filtrujących</param>
        /// <returns></returns>
        public static String getConditionString(IList<IFilter> filterList)
        {
            String condition = "";
            

            foreach (IFilter filter in filterList)
            {
                if (!filter.ColumnValue.Equals(""))
                {
                    condition += " AND ";
                
                    condition += " "+filter.Precondition + " ";

                    condition += " " + filter.ColumnName;
                    condition += filter.IsString ? " LIKE " : "=";
                    condition += filter.IsString ? "'" : "";
                    condition += filter.ColumnValue;
                    condition += filter.IsString ? "'" : "";
                }
            }

            return condition;
        }
    }
}
